﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace LI4.Data
{
    class Empresa
    {
        private Ligacao ligacao;

        public Empresa()
        {
            ligacao = new Ligacao();
        }

        public int inserirEmpresa(Business.Empresa emp)
        {
            Data.Login login = new Data.Login();
            if (!login.existeLogin(emp.Login.Username))
            {
                try
                {
                    login.inserir(emp.Login);
                    ligacao.Update("INSERT [dbo].[Empresas] ( [username], [nome], [rua], [cod_postal], [telefone], [mail], [descricao], [cod_area], [situacao], [cod_localidade]) VALUES (N'" + emp.Login.Username + "',N'" + emp.Nome + "',N'" + emp.Rua + "',N'" + emp.CodPostal + "'," + emp.Telefone + ",N'" + emp.Mail + "','" + emp.Descricao + "','" + emp.Area.Cod_Area + "','" + emp.Situacao + "','" + emp.Localidade.CodLocalidade + "')");
                    return Ligacao.OK;
                }
                catch
                {
                    return Ligacao.DBERROR;
                }
           }
            else
                return Business.Login.BADLOGIN;
        }

        public int update(Business.Empresa empr)
        {
            Data.Login login = new Data.Login();
            try
            {
                ligacao.Update("UPDATE [dbo].[Empresas] SET nome='" + empr.Nome + "', rua='" + empr.Rua + "',cod_postal='" + empr.CodPostal + "', telefone=" + empr.Telefone + ",mail='" + empr.Mail + "',descricao='" + empr.Descricao + "', situacao=" + empr.Situacao + ",cod_localidade=" + empr.Localidade.CodLocalidade + " where username='" + empr.Login.Username+ "'");
                login.update(empr.Login);
                return Ligacao.OK;
            }
            catch
            {
                return Ligacao.DBERROR;
            }
        }

        public int remover(Business.Empresa empr)
        {
            Data.Login login = new Data.Login();

            try
            {
                ligacao.Update("UPDATE [dbo].[Empresas] SET situacao=" + empr.Situacao + " where username='" + empr.Login.Username + "'");
                login.update(empr.Login);
                return Ligacao.OK;
            }
            catch
            {
                return Ligacao.DBERROR;
            }
        }

        public Business.Empresa getEmpresa(string username)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();
            Data.Area areaData = new Data.Area();

            Business.Empresa empresa = new LI4.Business.Empresa();
            Business.Login login = new LI4.Business.Login(log.getLogin(username));
            Business.Localidade local;
            Business.Area area;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Empresas where username='" + username + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string descricao = reader.GetString(6);
                int cod_area = reader.GetInt32(7);
                int situacao = reader.GetInt32(8);
                int cod_local = reader.GetInt32(9);

                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                area = new LI4.Business.Area(areaData.getArea(cod_area));

                empresa = new LI4.Business.Empresa(nome, mail, telefone, rua, cod_postal, local, descricao, area, situacao, login);

            }

            reader.Close();

            return empresa;

        }

        public bool existeEmpresa(string username)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM Empresas where username='" + username + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }
    }
}
